﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;

namespace WfActivityLibrary.control
{
    public class ChoiceClrxxConvert : TypeConverter
    {

        //根据类型参数进行测试，判断是否能从这个类型转换成当前类型,
        //在本例中我们只提供转换string和InstanceDescriptor类型的能力
        public override bool CanConvertFrom(ITypeDescriptorContext context,
            Type sourceType)
        {
            if (sourceType == typeof(String)) return true;

            return base.CanConvertFrom(context, sourceType);
        }

        //根据类型参数进行测试，判断是否能从当前类型转换成指定的类型。
        public override bool CanConvertTo(ITypeDescriptorContext context,
            Type destinationType)
        {
            if (destinationType == typeof(String)) return true;

            if (destinationType == typeof(InstanceDescriptor)) return true;

            return base.CanConvertTo(context, destinationType);
        }

        //将参数value的值转换为指定的类型。
        public override object ConvertTo(ITypeDescriptorContext context,
            System.Globalization.CultureInfo culture, object value, Type destinationType)
        {
            String result = "";
            //一个string类型的输入
            if (destinationType == typeof(String))
            {
                ChoiceClrxx choiceClrxx = (ChoiceClrxx)value;
                if (string.IsNullOrEmpty(choiceClrxx.处理者类型))
                    return "";
                result = choiceClrxx.处理者类型;

                if (!string.IsNullOrEmpty(choiceClrxx.处理者名称))
                    result = result + "," + choiceClrxx.处理者名称;

                if (!string.IsNullOrEmpty(choiceClrxx.是否按部门))
                    result = result + "," + choiceClrxx.是否按部门;
                return result;
            }
            return base.ConvertTo(context, culture, value, destinationType);
        }

        //串换参数value，并返回类型的一个对象。
        public override object ConvertFrom(ITypeDescriptorContext context,
            System.Globalization.CultureInfo culture, object value)
        {
            //输入时string，并且是,分隔
            if (value is string)
            {
                if (value.ToString() == "")
                    return base.ConvertFrom(context, culture, value);
                else
                {
                    String[] v = ((String)value).Split(',');
                    ChoiceClrxx choiceClrxx = new ChoiceClrxx();
                    if (v.GetLength(0) == 3)
                    {
                        choiceClrxx.处理者类型 = v[0];
                        choiceClrxx.处理者名称 = v[1];
                        //choiceClrxx.帐套名称 = v[2];
                    }
                    else if (v.GetLength(0) == 4)
                    {
                        choiceClrxx.处理者类型 = v[0];
                        choiceClrxx.处理者名称 = v[1];
                        choiceClrxx.是否按部门 = v[2];
                        //choiceClrxx.帐套名称 = v[3];
                    }
                    else if (v.GetLength(0) == 2)
                    {
                        choiceClrxx.处理者类型 = v[0];
                        //choiceClrxx.帐套名称 = v[1];
                    }
                    return choiceClrxx;
                }

            }
            return base.ConvertFrom(context, culture, value);
        }

        public override bool GetPropertiesSupported(ITypeDescriptorContext context)
        {
            return true;
        }

        public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
        {
            return TypeDescriptor.GetProperties(typeof(ChoiceClrxx), attributes);
        }

    }
}
